#ifndef _ADR_BASEPROPERTY_H_
#define _ADR_BASEPROPERTY_H_

#include <string>
#include <vector>

#include "adr/Metadata/Attribute.h"

namespace adr {
	using namespace std;

	class BaseProperty {
	private:
		vector<string> validationErrors;
		vector<Attribute*> attributes;
		string name;
		string displayName;
	public:	
		BaseProperty(const string& name, const string& displayName);
		const string& GetName() const;
		const string& GetDisplayName() const;
		
		const vector<string>& GetValidationErrors() const;
		void ClearValidationErrors();

		void AddAttribute(Attribute* attrib);		
		Attribute* GetAttributeByName(const string& attribName);

		bool Validate();

		bool IsValid() const;

		virtual bool HasValue() const = 0;

		friend class Attribute;

		virtual ~BaseProperty();
	};
}

#endif